package Controlador;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import java.util.Map;

import Vista.JFrameProducto;
import Modelo.Categoria;
import Modelo.Producto;
import Modelo.ProductoDAO;
import Modelo.CategoriaDAO;

public class ControladorJFrameProducto implements ActionListener{

	private JFrameProducto ventanaProducto;
	
	
	public ControladorJFrameProducto() {
		super();
		this.ventanaProducto = new JFrameProducto();
		this.ventanaProducto.addListener(this);
		this.ventanaProducto.setVisible(true);
		CargarComboCategoria();
	}
	
	@Override
	public void actionPerformed(ActionEvent e) {
		String actionCommand = e.getActionCommand();
		if(actionCommand.equals("Registrar"))
		{
			
			RegistrarProducto(); 
			//aca se recorre la lista q esta en ventanapod y se llama almetodo q esta e ProdIngDAO en un ciclo
			//por cada itemde la lista
		}
		else if (actionCommand.equals("Modificar"))
		{
			ModificarProducto();
		}
		else if (actionCommand.equals("Eliminar"))
		{
			EliminarProducto(BuscarProducto());
		}
		else if(actionCommand.equals("Limpiar"))
		{
			ventanaProducto.Blanquear();
		}
		else if(actionCommand.equals("Salir"))
		{
			ventanaProducto.setVisible(false);
		}
		else if(actionCommand.equals("Buscar"))
		{
			BuscarProducto();
		}	
		else if(actionCommand.equals("Agregar"))
		{
			AgregarIngre();// esto agrega ala lista q esta en la ventana producto..
		}
		else if(actionCommand.equals("Remover"))
		{
			RemoverIngre(); //esto remueve a la lista q esta en la ventana producto..
		}
	}
	@SuppressWarnings("null")
	public void CargarComboCategoria()
	{
		CategoriaDAO cateDAO = new CategoriaDAO();
		List<Categoria> datoscategorias = cateDAO.cargarDatos();
		Map<String, Categoria>  miscategorias = null;
		{
			for (int i=0; i<datoscategorias.size(); i++)
			{
				miscategorias.put(datoscategorias.get(i).getNombCategoria(), datoscategorias.get(i));
			}
			this.ventanaProducto.setCargarComboCategoria(miscategorias.keySet().toArray());
		}
		
	}
	public Producto BuscarProducto()
	{
		try
		{
			if(ventanaProducto.getCodProducto().equals("") || ventanaProducto.getNombProducto().equals(""))
			{
				ventanaProducto.MostrarMensaje("Deben ingresar el codigo de la Categoria");
			}
			else
			{
				ProductoDAO productoDAO = new ProductoDAO();
				Producto produ= productoDAO.BuscarProducto(ventanaProducto.getCodProducto());
				ventanaProducto.setCodProducto(produ.getCodProducto());
				ventanaProducto.setNombProducto(produ.getNombProducto());
				ventanaProducto.setCodCategoria(produ.getCodCategoria());
				return produ;
			}
		}
		catch (Exception e)
		{
			ventanaProducto.MostrarMensaje("El producto indicado no se encuentra registrado");
			ventanaProducto.Blanquear();
		}
		return null;
		
	}
	public void RegistrarProducto()
	{
		try
		{
			if(ventanaProducto.getCodProducto().equals("") )
			{
				ventanaProducto.MostrarMensaje("Deben ingresar el codigo de la Categoria");
			}
			else
			{
				ProductoDAO productoDAO = new ProductoDAO();
				Producto produ= productoDAO.BuscarProducto(ventanaProducto.getCodProducto());
				if(produ == null)
				{
				//ventanaProducto.setCodProducto(ventanaProducto.getCodProducto());
				//ventanaProducto.setNombProducto(ventanaProducto.getNombProducto());
				//ventanaProducto.setCodCategoria(ventanaProducto.getCategoria());
				Producto producto = new Producto(ventanaProducto.getCodProducto(), ventanaProducto.getCategoria(),ventanaProducto.getNombProducto(), ventanaProducto.getPrecio());
				productoDAO.AgregarProducto(producto);
				ventanaProducto.MostrarMensaje("Producto registrado exitosamente");
				
				}
				
			}
		}
		catch (Exception e)
		{
			ventanaProducto.MostrarMensaje("ERROR");
			ventanaProducto.Blanquear();
		}
		
	}
	public void ModificarProducto()
	{
		try
		{
			if(ventanaProducto.getCodProducto().equals("") )
			{
				ventanaProducto.MostrarMensaje("Deben ingresar el codigo del producto");
			}
			else
			{
				ProductoDAO productoDAO = new ProductoDAO();
				//Producto produ= productoDAO.BuscarProducto(ventanaProducto.getCodProducto());
				//if(produ == null)
				//{
				//ventanaProducto.setCodProducto(ventanaProducto.getCodProducto());
				//ventanaProducto.setNombProducto(ventanaProducto.getNombProducto());
				//ventanaProducto.setCodCategoria(ventanaProducto.getCategoria());
				Producto producto = new Producto(ventanaProducto.getCodProducto(), ventanaProducto.getCategoria(),ventanaProducto.getNombProducto(), ventanaProducto.getPrecio());
				productoDAO.ModificarProducto(producto);
				ventanaProducto.MostrarMensaje("Producto registrado exitosamente");
				
				//}
				
			}
		}
		catch (Exception e)
		{
			ventanaProducto.MostrarMensaje("ERROR");
			ventanaProducto.Blanquear();
		}
		
	}
	public void EliminarProducto(Producto produ)
	{
		try
		{
			if(ventanaProducto.getCodProducto().equals(""))
			{
				ventanaProducto.MostrarMensaje("Deben ingresar el codigo del producto");
			}
			else
			{
				ProductoDAO produDAO = new ProductoDAO();
				
				
				Producto prod= produ;
				
				produDAO.EliminarProducto(prod);
				ventanaProducto.MostrarMensaje("Cliente eliminado exitosamente!");
				ventanaProducto.Blanquear();
				//ventanaProducto.Habilitar(false);
				ventanaProducto.Blanquear();
			}
		}
		catch (Exception e)
		{
			ventanaProducto.MostrarMensaje("El cliente indicado no se encuentra registrado");
			ventanaProducto.Blanquear();
		}

	}
	public void AgregarIngre()
	{
		
	}
	public void RemoverIngre()
	{
		
	}
	
	
}
